home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / pyshared / AppInstall / Progress.py < prev    next >
Encoding:
Python Source  |  2009-03-31  |  2.9 KB  |  81 lines

  1. # (c) 2005-2007 Canonical - GPL
  2. #
  3. # Authors:
  4. #  Michael Vogt
  5.  
  6. import warnings
  7. warnings.filterwarnings("ignore", "apt API not stable yet", FutureWarning)
  8. import apt
  9. import apt_pkg
  10. import gtk
  11.  
  12. # intervals of the start up progress
  13. # 4x caching and menu creation
  14. STEPS_UPDATE_CACHE = [ 12, 25, 37, 50, 100 ]
  15.  
  16. class GtkOpProgressWindow(apt.progress.OpProgress):
  17.     def __init__(self, glade, parent, steps=STEPS_UPDATE_CACHE):
  18.         self.steps = steps[:]
  19.         self.base = 0
  20.         self.old = 0 
  21.         self.next = int(self.steps.pop(0))
  22.         self.window_progress = glade.get_widget("window_progress")
  23.         self.progressbar_cache = glade.get_widget("progressbar_cache")
  24.         self.label_action = glade.get_widget("label_action")
  25.         self.window_progress.realize()
  26.         self.window_progress.window.set_functions(gtk.gdk.FUNC_MOVE)
  27.         # make both GtkWindow and GdkWindow parents possible
  28.         if hasattr(parent, "window"):
  29.             parent = parent.window
  30.         if parent is not None:
  31.             self.window_progress.window.set_transient_for(parent)
  32.  
  33.     def update(self, percent):
  34.         self.window_progress.show()
  35.         # if the old percent was higher, a new progress was started
  36.         if self.old > percent:
  37.             # set the borders to the next interval
  38.             self.base = self.next
  39.             try:
  40.                 self.next = int(self.steps.pop(0))
  41.             except:
  42.                 pass
  43.         progress = self.base + percent/100 * (self.next - self.base)
  44.         self.old = percent
  45.         self.progressbar_cache.set_fraction(progress/100)
  46.         if self.subOp != "":
  47.             self.label_action.set_markup("<i>"+"%s" % self.subOp+"</i>")
  48.         while gtk.events_pending():
  49.             gtk.main_iteration()
  50.     # using __del__ here sucks (because of eventual GC lazines)
  51.     # but there is no "complete" callback in apt yet and "Done"
  52.     # is called for each subOp
  53.     def __del__(self):
  54.         self.window_progress.hide()
  55.  
  56. class GtkCdromProgress(apt.progress.CdromProgress):
  57.     """ Report the cdrom add progress
  58.         Subclass this class to implement cdrom add progress reporting
  59.     """
  60.     def __init__(self, parent):
  61.         self.progress = parent.progressbar_cache
  62.         self.status = parent.label_action
  63.         self.parent = parent
  64.         parent.window_progress.realize()
  65.         parent.window_progress.window.set_functions(gtk.gdk.FUNC_MOVE)
  66.         parent.window_progress.show()
  67.         parent.window_progress.set_transient_for(parent.window_main)
  68.         while gtk.events_pending():
  69.             gtk.main_iteration()
  70.     def update(self, text, step):
  71.         """ update is called regularly so that the gui can be redrawn """
  72.         if text:
  73.             self.status.set_text(text)
  74.         self.progress.set_fraction(step/float(self.totalSteps))
  75.         while gtk.events_pending():
  76.             gtk.main_iteration()
  77.     def askCdromName(self):
  78.         return (False, "")
  79.     def changeCdrom(self):
  80.         return False
  81.